package poly;

// 实现类，要实现接口
public class UserDaoImpl implements UserDao{
	// 只管理10个用户   
	private User[] users = new User[10]; // 10个null
	// index用来数当前users有几个用户
	private int index = 0;
	// 添加用户
	@Override
	public int insert(User user) {
		// 如果人数大于等于10，那么满了就不能放
		if (index >= users.length) {
			return 0;
		} else {
			// 开始index是0，把用户保存到数组下标0位置
			users[index] = user;
			// 下标自增1，下一次调用此方法，就把用户存入下标1位置，以此类推
			index++;
			// 成功了返回1
			return 1;
		}
	}

	@Override
	public int update(User user) {
		// 循环去找要被更改信息人的id，循环到index（因为index记录了当前的人数）
		for(int i = 0 ; i < index; i++) {
			// 循环的数组中每个人的userId 判断是否和参数的userId相等
			if (users[i].getUserId() == user.getUserId()) {
				// 参数哪个人换到数组中
				users[i] = user;
				// 更新成功，返回1
				return 1;
			}
		}
		// 如果最后都没有找到要被更新的id,那么返回0
		return 0;
	}

	@Override
	public int delete(int userId) {
		// 循环数组已有元素，
		for(int i = 0 ; i < index; i++) {
			// 找到要被删除的用户id
			if (users[i].getUserId() == userId) {
				// 找到后，从i+1依次往前一个元素赋值
				for (int j = i; j < index-1; j++ ) {
					users[j] = users[j+1];
				}
				//最后一个元素赋值为null
				users[index-1] = null;
				// 人数自减
				index --;
				// 成功返回1
				return 1;
			}
		}
		// 失败返回0
		return 0;
	}

	@Override
	public User selectById(int userId) {
		// 循环去找要被更改信息人的id，循环到index（因为index记录了当前的人数）
		for(int i = 0 ; i < index; i++) {
			// 循环的数组中每个人的userId 判断是否和参数的userId相等
			if (users[i].getUserId() == userId) {
				// 根据id如果找到此人，则返回此人
				return users[i];
			}
		}
		//如果最后都没有找到要被找的人,那么返回null
		return null;
	}

	@Override
	public User[] selectAll() {
		// 因为所有用户都在users数组中，所以返回整个数组
		//1.创建一个新数组
		User[] copy = new User[index];
		//2.数组拷贝: 从users的下标0拷贝到copy的下标0位置，拷贝index个元素
		System.arraycopy(users, 0, copy, 0, index);
		// 返回
		return copy;
	}

}
